package com.hotec.PROJECT_NAME.component.dtohandler.callbackhandler;

import com.gemcap.framework.common.data.dto.support.DTOCallbackHandler;
import com.google.common.collect.Maps;
import com.hotec.PROJECT_NAME.component.basic.HotecEnum;
import com.hotec.PROJECT_NAME.modules.sys.service.SysDictService;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;

/**
 * 对待转换的实体进行字典项的转换
 */
@Data
public class DTOCallbackHandlerWithEnum implements DTOCallbackHandler {

    private Map<String, String> propertyDicMap = Maps.newHashMap();

    private Map<String, Map<String, String>> dictionaryMap;

    private SysDictService sysDictService;

    /**
     * 转换后字典项的后缀
     */
    private String propertyDicPostfix = "_dic";


    /**
     * 查询字典项
     */

    /**
     * 是否为枚举值
     *
     * @return
     */
    public boolean isEnumValue(Object value) {
        if (value != null && value.getClass().isEnum()) {
            return true;
        }

        return false;
    }

    /**
     * 返回父节点code下的所有子节点信息
     *
     * @param code
     * @return
     */
    public Map<String, String> getDictionaryItemMap(String code) {
        if (StringUtils.isBlank(code)) {
            return null;
        }
        return dictionaryMap.get(code);
    }

    /**
     * 进行字典项转换的处理
     *
     * @param dtoMap
     */
    @Override
    public void doHandler(Map<String, Object> dtoMap) {

        Map<String, String> enumDto = Maps.newHashMap();
        for (Map.Entry<String, Object> item : dtoMap.entrySet()) {
            //判断是否可以使用字典项
            if (item.getValue() != null && item.getValue() instanceof HotecEnum) {

                enumDto.put(item.getKey() + getPropertyDicPostfix(), ((HotecEnum) item.getValue()).getRemark());
            }
        }
        dtoMap.putAll(enumDto);
    }
}
